#include <bits/stdc++.h>
using namespace std;

/*
1304. 和为零的 N 个不同整数
已解答
简单
相关标签
premium lock icon
相关企业
提示
给你一个整数 n，请你返回 任意 一个由 n 个 各不相同 的整数组成的数组，并且这 n 个数相加和为 0 。

 

示例 1：

输入：n = 5
输出：[-7,-1,1,3,4]
解释：这些数组也是正确的 [-5,-1,1,2,3]，[-3,-1,2,-2,4]。
示例 2：

输入：n = 3
输出：[-1,0,1]
示例 3：

输入：n = 1
输出：[0]
 

提示：

1 <= n <= 1000
*/

// 法一
class Solution {
public:
    vector<int> sumZero(int n) {
        vector<int> result;
        // 如果n是奇数，先加入0
        if (n % 2 != 0) {
            result.push_back(0);
            n--; // 剩下的元素数量变为偶数
        }
        // 加入成对的相反数
        for (int i = 1; i <= n / 2; ++i) {
            result.push_back(i);
            result.push_back(-i);
        }
        return result;
    }
};

// 简洁
class Solution {
public:
    vector<int> sumZero(int n) {
        vector<int> v;
        if (n % 2)
            v.push_back(0);
        for (int i = 1; i <= n / 2; ++i)
            v.push_back(i), v.push_back(-i);
        return v;
    }
};
